package org.example.springaop;

import org.example.springaop.test3.Test1;
import org.example.springaop.test3.Test2;
import org.example.springaop.test3.TestIntFace;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class SpringAopApplication {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(SpringAopApplication.class, args);
//      1.在没有任何配置修改的情况下: 两种情况都能够正常代理
//        Test1 t1 = context.getBean(Test1.class);
//        t1.say();
//        System.out.println(t1.getClass().toString());
//        System.out.println("--------------------------------");
//        Test2 t2 = context.getBean(Test2.class);
//        t2.say();
//        System.out.println(t2.getClass().toString());

        // 2. 修改配置为 JDK代理

        // 这个实现了接口的已经不能打印了 ,因为JDK要用的是接口这里应该改成接口来用
//        Test1 t1 = context.getBean(Test1.class);
//        t1.say();
//        System.out.println(t1.getClass().toString());
        // 改成接口 来接收bean , 同时bean也改成用 bean名字作为参数 ,
        // 能够正常使用 JDK代理
        TestIntFace testIntFace = (TestIntFace) context.getBean("test1");
//        testIntFace.say();
        System.out.println(testIntFace.getClass().toString());
         // 普通类能够正常被 CGlib代理
//        System.out.println("--------------------------------");
//        Test2 t2 = context.getBean(Test2.class);
//        t2.say();
//        System.out.println(t2.getClass().toString());

    }

}
